package com.zhao.fishingguideserver.config;

import com.zhao.fishingguideserver.interceptors.AdminLoginInterceptor;
import com.zhao.fishingguideserver.interceptors.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

//登录拦截配置类
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private LoginInterceptor loginInterceptor;
    
    @Autowired
    private AdminLoginInterceptor adminLoginInterceptor;

    @Value("${app.cors.allowed-origins:*}")
    private String allowedOriginsProp;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 管理员拦截器：拦截所有/admin/**请求，排除登录接口
        registry.addInterceptor(adminLoginInterceptor)
                .addPathPatterns("/admin/**")
                .excludePathPatterns("/admin/auth/login");
        
        // 普通用户拦截器
        registry.addInterceptor(loginInterceptor)
                // 拦截所有接口（需要登录的）
                .addPathPatterns("/**")
                // 排除不需要登录的接口（核心！）
                .excludePathPatterns(
                        "/user/login",    // 登录
                        "/user/register", // 注册
                        "/user/info/**",  // 根据用户ID获取用户信息（无需登录）
                        "/product/selectAll", // 商品列表查询（无需登录）
                        "/product/list",  // 商品列表查询（无需登录）
                        "/product/available", // 在售商品查询（无需登录）
                        "/product/detail/**", // 商品详情查询（无需登录）
                        "/product/search", // 商品搜索（无需登录）
                        "/product/filterByOldLevel/**", // 商品筛选（无需登录）
                        "/fish/**",       // 鱼类大全（无需登录）
                        "/upload/**",     // 文件上传（无需登录）
                        "/fish-sql/**",   // 鱼类图片SQL生成（无需登录）
                        "/fish-image/**", // 鱼类图片管理（无需登录）
                        "/favorite/count/**", // 收藏数量查询（无需登录）
                        "/post/detail/**", // 帖子详情查询（无需登录）
                        "/post/list", // 帖子列表查询（无需登录）
                        "/post/category/**", // 分类帖子查询（无需登录）
                        "/post/search", // 帖子搜索（无需登录）
                        "/post/hot", // 热门帖子查询（无需登录）
                        "/post/view/**", // 增加浏览次数（无需登录）
                        "/comment/post/**", // 帖子评论查询（无需登录）
                        "/test/**",          // 测试接口
                        "/cart/batchDelete", // 批量删除（已拦截，无需额外排除）
                        "/admin/**"          // 管理员接口由专门的拦截器处理
                );
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        String[] origins = "*".equals(allowedOriginsProp) ? new String[] {"*"} : allowedOriginsProp.split("\\s*,\\s*");
        registry.addMapping("/**") // 所有接口支持跨域
                .allowedOrigins(origins) // 允许的域名（生产环境配置具体域名）
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的请求方法
                .allowedHeaders("*") // 允许任何请求头
                .allowCredentials(false) // 不允许携带凭证（根据需求调整）
                .maxAge(3600L); // 预检请求缓存时间
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 配置静态资源访问路径
        registry.addResourceHandler("/uploads/**")
                .addResourceLocations("file:uploads/");
    }
}